package org.datascooter.inface;

import java.util.List;

import org.datascooter.bundle.CrossTable;
import org.datascooter.bundle.EntityBundle;
import org.datascooter.exception.EntityNotMappedException;

/**
 * Interface for a EntityBundle providers - objects provide a mapping from xml files or from others stores
 * 
 * @author nemo
 * 
 */
public interface IBundleProvider extends IProvider<EntityBundle> {

	/**
	 * Returns EntityBundle for this entity
	 * 
	 * @param obj
	 * @return EntityBundle
	 * @throws EntityNotMappedException
	 * @throws ClassNotFoundException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 */
	public EntityBundle getBundle(Object obj) throws EntityNotMappedException, ClassNotFoundException, SecurityException, NoSuchMethodException;

	/**
	 * Returns bundle List for non volatile entities which can be mapped only one time - by example by start.
	 * 
	 * @return EntityBundle
	 */
	public List<EntityBundle> provideNonVolatile();

	/**
	 * Returns bundle List for schemas.
	 * 
	 * @return EntityBundle
	 */
	public List<EntityBundle> getSchemaList();

	/**
	 * Returns list of CrossTableObjects for Many-to-Many relations without creation special entities
	 * 
	 * @return CrossTable
	 */
	public List<CrossTable> getCrossList();
}
